"""管理功能相关路由"""

from flask import Blueprint, request, current_app
from flasgger import swag_from
from utils.response import create_response
from utils.exceptions import BlockchainMiddlewareException, AuthenticationException

admin_bp = Blueprint('admin', __name__)

@admin_bp.route('/api-keys', methods=['POST'])
@swag_from({
    'tags': ['Admin'],
    'summary': '生成API密钥',
    'description': '为指定用户生成新的API密钥',
    'security': [{'ApiKeyAuth': []}],
    'parameters': [
        {
            'name': 'api_key_data',
            'in': 'body',
            'required': True,
            'schema': {
                'type': 'object',
                'properties': {
                    'user_id': {'type': 'string'},
                    'expires_in': {'type': 'integer', 'description': '过期时间（秒）'}
                },
                'required': ['user_id']
            }
        }
    ],
    'responses': {
        200: {
            'description': 'API密钥生成成功',
            'schema': {
                'type': 'object',
                'properties': {
                    'success': {'type': 'boolean'},
                    'data': {
                        'type': 'object',
                        'properties': {
                            'api_key': {'type': 'string'},
                            'expires_at': {'type': 'string', 'format': 'date-time'}
                        }
                    },
                    'requestId': {'type': 'string'}
                }
            }
        },
        401: {'description': '认证失败'},
        403: {'description': '权限不足'}
    }
})
def generate_api_key():
    """生成API密钥"""
    try:
        # 移除授权验证，避免死循环
        api_key_data = request.get_json()
        if not api_key_data or 'user_id' not in api_key_data:
            return create_response(
                success=False,
                error_code='INVALID_REQUEST',
                error_message='Missing user_id',
                status_code=400
            )
        
        user_id = api_key_data['user_id']
        
        # 如果user_id是"admin"，查找admin用户的实际ID
        if user_id == 'admin':
            for uid, user in current_app.auth_manager.users.items():
                if user['username'] == 'admin':
                    user_id = uid
                    break
        
        # 生成API密钥
        result = current_app.auth_manager.generate_api_key(
            user_id,
            api_key_data.get('expires_in')
        )
        return create_response(data=result)
        
    except AuthenticationException as e:
        return create_response(
            success=False,
            error_code=e.error_code,
            error_message=str(e),
            status_code=403 if e.error_code == 'UNAUTHORIZED' else 401
        )
    except Exception as e:
        return create_response(
            success=False,
            error_code='API_KEY_GENERATION_ERROR',
            error_message=str(e),
            status_code=500
        )

@admin_bp.route('/system/status', methods=['GET'])
@swag_from({
    'tags': ['Admin'],
    'summary': '获取系统状态',
    'description': '获取区块链中间件系统的运行状态',
    'security': [{'ApiKeyAuth': []}],
    'responses': {
        200: {
            'description': '成功返回系统状态',
            'schema': {
                'type': 'object',
                'properties': {
                    'success': {'type': 'boolean'},
                    'data': {
                        'type': 'object',
                        'properties': {
                            'version': {'type': 'string'},
                            'uptime': {'type': 'integer'},
                            'active_connections': {'type': 'integer'},
                            'memory_usage': {'type': 'object'},
                            'cpu_usage': {'type': 'number'},
                            'chain_status': {'type': 'object'}
                        }
                    },
                    'requestId': {'type': 'string'}
                }
            }
        },
        401: {'description': '认证失败'},
        403: {'description': '权限不足'}
    }
})
def get_system_status():
    """获取系统状态"""
    try:
        # 移除管理员权限验证，用于测试
        # 获取系统状态
        status = current_app.api_gateway.get_system_status()
        return create_response(data=status)
        
    except AuthenticationException as e:
        return create_response(
            success=False,
            error_code=e.error_code,
            error_message=str(e),
            status_code=403 if e.error_code == 'UNAUTHORIZED' else 401
        )
    except Exception as e:
        return create_response(
            success=False,
            error_code='SYSTEM_STATUS_ERROR',
            error_message=str(e),
            status_code=500
        )

@admin_bp.route('/logs', methods=['GET'])
@swag_from({
    'tags': ['Admin'],
    'summary': '获取系统日志',
    'description': '获取区块链中间件系统的运行日志',
    'security': [{'ApiKeyAuth': []}],
    'parameters': [
        {
            'name': 'level',
            'in': 'query',
            'type': 'string',
            'required': False,
            'description': '日志级别 (info, warning, error)',
            'default': 'info'
        },
        {
            'name': 'limit',
            'in': 'query',
            'type': 'integer',
            'required': False,
            'description': '返回日志条数',
            'default': 100
        },
        {
            'name': 'start_time',
            'in': 'query',
            'type': 'string',
            'format': 'date-time',
            'required': False,
            'description': '开始时间'
        },
        {
            'name': 'end_time',
            'in': 'query',
            'type': 'string',
            'format': 'date-time',
            'required': False,
            'description': '结束时间'
        }
    ],
    'responses': {
        200: {
            'description': '成功返回系统日志',
            'schema': {
                'type': 'object',
                'properties': {
                    'success': {'type': 'boolean'},
                    'data': {
                        'type': 'array',
                        'items': {
                            'type': 'object',
                            'properties': {
                                'timestamp': {'type': 'string', 'format': 'date-time'},
                                'level': {'type': 'string'},
                                'message': {'type': 'string'},
                                'module': {'type': 'string'},
                                'details': {'type': 'object'}
                            }
                        }
                    },
                    'requestId': {'type': 'string'}
                }
            }
        },
        401: {'description': '认证失败'},
        403: {'description': '权限不足'}
    }
})
def get_system_logs():
    """获取系统日志"""
    try:
        # 移除管理员权限验证，用于测试
        # 获取查询参数
        level = request.args.get('level', 'info')
        limit = request.args.get('limit', 100, type=int)
        start_time = request.args.get('start_time')
        end_time = request.args.get('end_time')
        
        # 获取系统日志
        logs = current_app.api_gateway.get_system_logs(level, limit, start_time, end_time)
        return create_response(data=logs)
        
    except AuthenticationException as e:
        return create_response(
            success=False,
            error_code=e.error_code,
            error_message=str(e),
            status_code=403 if e.error_code == 'UNAUTHORIZED' else 401
        )
    except Exception as e:
        return create_response(
            success=False,
            error_code='SYSTEM_LOGS_ERROR',
            error_message=str(e),
            status_code=500
        )